package com.unlcn.ils.erpInterfaces.service.buss.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.unlcn.ils.erpInterfaces.dao.mapper.SoorderMapper;
import com.unlcn.ils.erpInterfaces.dao.model.Smcity;
import com.unlcn.ils.erpInterfaces.dao.model.Smcitymap;
import com.unlcn.ils.erpInterfaces.dao.model.Soorder;
import com.unlcn.ils.erpInterfaces.dao.model.WmsOrderLog;
import com.unlcn.ils.erpInterfaces.service.buss.ISmgetpointService;
import com.unlcn.ils.erpInterfaces.service.buss.ISoorderService;
import com.unlcn.ils.erpInterfaces.service.util.UniquenessFlagUnits;
import com.unlcn.ils.erpInterfaces.service.util.enums.CustomerIdEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * Created by lenovo on 2018/6/9.
 */
@Service
public class SoorderServiceImpl implements ISoorderService {

    @Autowired
    private SoorderMapper soorderMapper;

    @Autowired
    private ISmgetpointService smgetpointService;

    @Override
    public String getOrderNo(Long customerId) {

        String orderNo = null;

        if (customerId.equals(Long.valueOf(CustomerIdEnum.JMCS.getId()))) {
            // 君马长沙
            orderNo = UniquenessFlagUnits.generateUniquenessFlag(CustomerIdEnum.JMCS.getText());
        } else if (customerId.equals(Long.valueOf(CustomerIdEnum.JMXY.getId()))) {
            // 君马襄阳
            orderNo = UniquenessFlagUnits.generateUniquenessFlag(CustomerIdEnum.JMXY.getText());
        }

        return orderNo;
    }

    @Transactional(propagation= Propagation.REQUIRED)
    @Override
    public String saveOrder(WmsOrderLog wmsOrderLog, Soorder soorder, Smcity startCity, Smcity endCity) {

        String vcorderNo = null;

        soorder.setVccustorderno(wmsOrderLog.getHandoverNumber());    // 客户订单号
        soorder.setVcaddress(startCity.getVccityname());              // 装货地址
        soorder.setVccontact(wmsOrderLog.getDepartContact());         // 发货联系人
        soorder.setVctel(wmsOrderLog.getDepartPhone());               // 发货联系电话
        soorder.setVcaddress2(wmsOrderLog.getReceiptAddr());          // 收获地址
        soorder.setVccontact2(wmsOrderLog.getReceiptContact());       // 收获联系人
        soorder.setVctel2(wmsOrderLog.getReceiptPhone());             // 收车联系电话
        soorder.setVcstartcity(startCity.getVccityname());            // 起运地
        soorder.setVccityname(endCity.getVccityname());               // 目的地
        soorder.setDtcreatedate(new Date());                          // 创建时间爱你
        soorder.setVcvin(wmsOrderLog.getVin());                       // 底盘号
        // 提车库 id
        soorder.setIgetpoint((double)smgetpointService.getPointId(soorder.getIcustomerid().longValue(),
                startCity.getVccityname(), wmsOrderLog.getDepartProvinceName()));
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            soorder.setDtshipdate(format.parse(wmsOrderLog.getDtshipdate()));    // 要求起运日期
            soorder.setDtcomedate(format.parse(wmsOrderLog.getDtarriveDate()));  // 要求到达日期
            soorder.setDtdate(format.parse(wmsOrderLog.getOrderDate()));         // 录入时间（取订单日期）
        } catch (Exception e) {
            e.printStackTrace();
        }
        soorder.setBurgent(Double.valueOf(wmsOrderLog.getBurgent()));       // 要求加急
        soorder.setVcrequire(wmsOrderLog.getVcrequire());                   // 发运要求
        soorder.setVcmemo(wmsOrderLog.getRemark());                         // 备注
        soorder.setDckilometer(wmsOrderLog.getDistance());  // 标准公里数

        // 查询订单是否存在
        Wrapper<Soorder> soorderWrapper = new EntityWrapper<>();
        soorderWrapper.eq("VCORDERNO", wmsOrderLog.getOrderno());
        List<Soorder> soorderList = soorderMapper.selectList(soorderWrapper);

        // 不存在插入，存在更新
        if (CollectionUtils.isEmpty(soorderList)) {

            // 主键 id
            Long ilineid = soorderMapper.getNextIlineid();
            soorder.setIlineid((double) ilineid);
            soorder.setIorderid((double)ilineid);

            // ERP中的系统订单号
            vcorderNo = getOrderNo(wmsOrderLog.getCustomId());
            soorder.setVcorderno(vcorderNo);

            soorder.setVcuserno("system");
            soorder.setDcqty(Double.valueOf(1));
            soorder.setDcshipedqty(Double.valueOf(0));
            soorder.setVcunit("辆");
            soorder.setDcqty2((double)0);
            soorder.setIpid((double)0);
            soorder.setDcjsqty((double)0);
            soorder.setDcprice((double)0);
            soorder.setIdeptid((double)0);
            soorder.setDccustqty((double)0);
            soorder.setIkilometerflag((double)0);
            soorder.setIpriceflag((double)0);
            soorder.setIshipid((double)0);
            soorder.setDccash1((double)0);
            soorder.setIpayid((double)1);
            soorder.setIpayid2((double)1);
            soorder.setDcalkilometer((double)0);
            soorder.setDcalprice((double)0);
            soorder.setIcheckid((double)1);
            soorder.setVccheckmemo("来源于wms导入");
            soorder.setVccheckuserno("system");
            soorder.setIpassid((double)0);
            soorder.setBactive((double)0);
            soorder.setIflag((double)0);
            soorder.setIfleetid((double)0);
            soorder.setImodeid((double)2);
            soorder.setIdestid((double)0);
            soorder.setIdealerid((double)0);
            soorder.setIcustmodeid((double)0);
            soorder.setBneedReceipt(1);
            soorder.setIendpoint((double)0);
            soorder.setIarcityid((double)0);
            soorder.setIsdispatch(1);
            soorder.setDataresource("来源于wms导入");
            soorderMapper.insert(soorder);
        } else {
            soorder.setIlineid((double) soorderList.get(0).getIlineid());
            soorderMapper.updateById(soorder);

            vcorderNo = soorder.getVcorderno();
        }

        return vcorderNo;
    }
}
